День 3 Летней школы Julia
作者
Ошибки и методы их определения.
In [ ]:
x = [1,2,3]
x + 1
In [ ]:
x .+ 1
Out[0]:
In [ ]:
sin(x)
In [ ]:
sin.(x)
Out[0]:
Пример использования try...catch в Julia
Базовый синтаксис:
try
# Код, который может вызвать ошибку
catch e
# Обработка ошибки
# e - переменная, содержащая информацию об ошибке
finally
# Опциональный блок, который выполнится в любом случае
end
In [ ]:
function safe_int_divide(a::Int, b::Int)
try
return div(a, b) # Целочисленное деление, вызывает DivideError при b=0
catch e
println("Поймана ошибка: ", e)
return nothing
end
end
println("Тест 1: 10 ÷ 3 = ", safe_int_divide(10, 3)) # 3
println("Тест 2: 10 ÷ 0 = ", safe_int_divide(10, 0)) # DivideError
In [ ]:
function real_sqrt(x)
try
if x < 0
throw(DomainError(x, "Квадратный корень из отрицательного числа"))
end
return sqrt(x)
catch e
println("Поймана ошибка: ", e)
return nothing
end
end
println("\nТест 3: √4 = ", real_sqrt(4)) # 2.0
println("Тест 4: √-1 = ", real_sqrt(-1)) # DomainError
In [ ]:
function parse_and_divide(str_a, str_b)
try
a = parse(Int, str_a)
b = parse(Int, str_b)
return div(a, b)
catch e
if isa(e, ArgumentError)
println("Ошибка парсинга: неверный формат числа")
elseif isa(e, DivideError)
println("Ошибка деления: деление на ноль")
else
println("Неизвестная ошибка: ", e)
end
return nothing
end
end
# Тесты
println("\nТест 5: \"10\" ÷ \"2\" = ", parse_and_divide("10", "2")) # 5
println("Тест 6: \"10\" ÷ \"0\" = ", parse_and_divide("10", "0")) # DivideError
println("Тест 7: \"abc\" ÷ \"2\" = ", parse_and_divide("abc", "2")) # ArgumentError